package com.weijian.util;

/**
 * 学习记录Redis键工具类
 * 统一管理学习记录相关的Redis键名
 */
public class StudyRedisKeyUtil {

    /**
     * 用户课程学习进度缓存键
     * 格式: study:progress:{userId}:{courseId}
     */
    public static String getStudyProgressKey(Long userId, Long courseId) {
        return String.format("study:progress:%d:%d", userId, courseId);
    }

    /**
     * 用户最近学习课程列表键
     * 格式: study:recent:{userId}
     */
    public static String getRecentStudyKey(Long userId) {
        return String.format("study:recent:%d", userId);
    }

    /**
     * 课程学习人数统计键
     * 格式: study:course:learners:{courseId}
     */
    public static String getCourseLearnersKey(Long courseId) {
        return String.format("study:course:learners:%d", courseId);
    }

    /**
     * 每日学习排行榜键
     * 格式: study:daily:top:{yyyyMMdd}
     */
    public static String getDailyStudyTopKey(String date) {
        return String.format("study:daily:top:%s", date);
    }

    /**
     * 用户每日学习状态键（Bitmap）
     * 格式: study:daily:user:{yyyyMMdd}
     */
    public static String getDailyUserStudyKey(String date) {
        return String.format("study:daily:user:%s", date);
    }

    /**
     * 用户学习时长排行榜键（总榜）
     * 格式: study:leaderboard:total
     */
    public static String getTotalStudyLeaderboardKey() {
        return "study:leaderboard:total";
    }

    /**
     * 课程学习时长排行榜键
     * 格式: study:leaderboard:course
     */
    public static String getCourseStudyLeaderboardKey() {
        return "study:leaderboard:course";
    }

    /**
     * 用户学习锁定键（防止并发更新）
     * 格式: study:lock:{userId}:{courseId}
     */
    public static String getStudyLockKey(Long userId, Long courseId) {
        return String.format("study:lock:%d:%d", userId, courseId);
    }

    /**
     * 用户学习会话键
     * 格式: study:session:{userId}:{sessionId}
     */
    public static String getStudySessionKey(Long userId, String sessionId) {
        return String.format("study:session:%d:%s", userId, sessionId);
    }

    /**
     * 课程视频列表键
     * 格式: course:videos:{courseId}
     */
    public static String getCourseVideosKey(Long courseId) {
        return String.format("course:videos:%d", courseId);
    }

    /**
     * 视频总时长键
     * 格式: video:duration:{videoId}
     */
    public static String getVideoDurationKey(Long videoId) {
        return String.format("video:duration:%d", videoId);
    }
}